package com.yyks.cnbooking.dubbo.service.redis;

import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * redis操作Service,
 * 对象和数组都以json形式进行存储
 *
 * @author Administrator*/
public interface RedisService {

    /**
     * String类型存储数据
     * @param key 有效key
     * @param value 值
     */
    void set(String key, String value);
    /**
     * String类型存储数据 ，并且设置有效时间
     * @param key 有效key
     * @param value 值
     * @param expire 时间大小
     * @param timeUnit 时间单位（小时，天等、）
     */
    void setAndExpire(String key, String value, long expire, TimeUnit timeUnit);

    /**
     * 获取数据
     * @param key 有效key
     * @return 得到数据
     */
    String get(String key);

    /**
     * 设置超期时间
     * @param key 有效key
     * @param expire 时间大小
     * @param timeUnit 时间单位（小时，天等、）
     * @return true 设置成功
     */
    boolean expire(String key, long expire, TimeUnit timeUnit);

    /**
     * 删除数据
     * @param key 有效key
     */
    void remove(String key);

    /**
     * 自增操作
     * @param delta 自增步长
     * @return 得到自增长的下一个值
     */
    Long increment(String key, long delta);

    /**
     * 存入hash数据
     * @param mapList 集合数据
     * @param key 有效key
     * @param hashKey 有效hashKey
     * @param expire 时间大小
     * @param timeUnit 时间单位（小时，天等、）
     */
    void saveHashList(List<Map> mapList, String key, String hashKey, long expire, TimeUnit timeUnit);

    /**
     * 存入hash数据
     * @param map 对象数据
     * @param key 有效key
     * @param hashKey 有效hashKey
     * @param expire 时间大小
     * @param timeUnit 时间单位（小时，天等、）
     */
    void saveHashString(Map map, String key, String hashKey, long expire, TimeUnit timeUnit);

    /**
     * 得到list数据
     * @param key key值
     * @return 返回集合数据
     */
    List<Map> getList(String key);

    /**
     * 得到某一条数据信息
     * @param key key
     * @param hashKey hash
     * @return
     */
    Map getHashString(String key, String hashKey);

    /**
     * 删除某条hash的值
     * @param key
     * @param hashKey
     */
    void deleteHashString(String key, String hashKey);


    /**
     * 得到Hash中的数据
     * @param key key值
     * @param hashKey 对象hashkey
     * @return 返回集合Map
     */
    List<Map> getHashList(String key, String hashKey);
}
